package com.itheima.edu.info.manager.service;

import com.itheima.edu.info.manager.dao.BaseStudentDao;
import com.itheima.edu.info.manager.domain.Student;
import com.itheima.edu.info.manager.factory.StudentDaoFactory;

/*
    业务员类
        1. 这里的所有方法【功能】都是给客服用
        2. 如果某些业务涉及到要对数据仓库的数据进行访问的话，那么需要在业务员类中操作库管对象
        3. 该类的核心作用是用于处理业务逻辑，例如：判断录入的id是否存在。
 */
public class StudentService {
    // 1. 创建StudentDao (库管)
    //private OtherStudentDao studentDao = new OtherStudentDao();
    private BaseStudentDao studentDao = StudentDaoFactory.getStudentDao();

    // 添加学生方法
    public boolean addStudent(Student stu) {
        // 2. 将学生对象, 传递给StudentDao 库管中的addStudent方法
        // 3. 将返回的boolean类型结果, 返还给StudentController
        return studentDao.addStudent(stu);
    }

    //判断学号在系统【数据仓库】中是否存在
    public boolean isExists(String id) {
        //1. 让库管把仓库中所有数据都拿出来
        Student[] stuArray = studentDao.findAllStudent();
        //2. 定义一个标记: boolean flag=false,初始值为false,表示假设输入的id在数据中不存在
        boolean flag = false;
        //3. 遍历stuArray,拿到每一个学生对象,取每个学生对象的id和传进来的id进行比较
        for (int i = 0; i < stuArray.length; i++) {
            Student stu = stuArray[i];
            //判断当前学生对象不为空,并且当前学生对象的学号和用户录入的学号是否一致
            if (stu != null && stu.getId().equals(id)) {
                //一致说明存在
                flag = true;
                break;
            }
        }
        //4. 返回flag的值
        return flag;
    }

    //查询所有学生信息
    public Student[] findAllStudent() {
        Student[] allStudent = studentDao.findAllStudent();
        // 定义一个标记: boolean flag=false,默认值表示先假设数组里全是null
        boolean flag = false;
        for (int i = 0; i < allStudent.length; i++) {
            Student stu = allStudent[i];
            if (stu != null) {
                flag = true;
                break;
            }
        }
        // 根据flag的值来决定当前方法的返回值
        if (flag) {
            // 说明allStudent中有学生对象,这是返回allStudent即可
            return allStudent;
        } else {
            // flag为false表示allStudent中全是null,一个学生对象都没有,这是返回null
            return null;
        }
    }

    //删除学生
    public void deleteStudent(String deleteId) {
        studentDao.deleteStudent(deleteId);
    }

    public void updateStudent(String updateId, Student newStu) {
        studentDao.updateStudent(updateId, newStu);
    }
}
